// [bm] no TaskBar
///*******************************************************************************
// * Copyright (c) 2010 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// * Tasktop Technologies - initial API and implementation
// ******************************************************************************/
//
//package org.eclipse.ui.internal.progress;
//
//import java.util.ArrayList;
//import java.util.Collections;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import org.eclipse.core.runtime.Assert;
//import org.eclipse.core.runtime.IProgressMonitor;
//import org.eclipse.core.runtime.IStatus;
//import org.eclipse.core.runtime.Status;
//import org.eclipse.core.runtime.jobs.Job;
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.events.DisposeEvent;
//import org.eclipse.swt.events.DisposeListener;
//import org.eclipse.swt.widgets.TaskItem;
//import org.eclipse.ui.progress.IProgressConstants2;
//import org.eclipse.ui.progress.WorkbenchJob;
//
///**
// * The TaskBarProgressManager is the class that displays progress in the
// * application TaskBar if the job specifies that it should show progress (@see
// * {@link IProgressConstants2#SHOW_IN_TASKBAR_ICON_PROPERTY}
// *
// * @since 3.6
// */
//public class TaskBarProgressManager {
//
// private IJobProgressManagerListener listener;
//
// private WorkbenchJob animationUpdateJob;
//
// private boolean isAnimated = false;
//
// private List jobs = Collections.synchronizedList(new ArrayList());
//
// private Map jobInfoMap = Collections.synchronizedMap(new HashMap());
//
// private final TaskItem taskItem;
//
// public TaskBarProgressManager(TaskItem taskItem) {
// Assert.isNotNull(taskItem);
// this.taskItem = taskItem;
// animationUpdateJob = getAnimationUpdateJob();
// animationUpdateJob.setSystem(true);
// listener = getProgressListener();
//
// // Register the IJobProgressManagerListener so we can display progress
// // on the application TaskBar
// ProgressManager.getInstance().addListener(listener);
//
// taskItem.addDisposeListener(new DisposeListener() {
// public void widgetDisposed(DisposeEvent e) {
// dispose();
// }
// });
// }
//
// /**
// * Remove the listener and stop the animation
// */
// public void dispose() {
// ProgressManager.getInstance().removeListener(listener);
// setAnimated(false);
// }
//
// private WorkbenchJob getAnimationUpdateJob() {
// return new WorkbenchJob(ProgressMessages.AnimationManager_AnimationStart) {
//
// /*
// * (non-Javadoc)
// *
// * @see
// * org.eclipse.ui.progress.UIJob#runInUIThread(org.eclipse.core.
// * runtime .IProgressMonitor)
// */
// public IStatus runInUIThread(IProgressMonitor monitor) {
// if (isAnimated) {
// if (!taskItem.isDisposed() && !jobs.isEmpty()) {
// Job job = (Job) jobs.get(0);
// JobInfo jobInfo = (JobInfo) jobInfoMap.get(job);
// if (job != null && jobInfo != null) {
// int percentDone = getPercentDone(jobInfo);
// if (percentDone == IProgressMonitor.UNKNOWN
// || (jobInfo.hasTaskInfo() && jobInfo.getTaskInfo().totalWork == IProgressMonitor.UNKNOWN)) {
// setProgressState(SWT.INDETERMINATE);
// } else {
// setProgressState(SWT.NORMAL);
// if (!taskItem.isDisposed()) {
// taskItem.setProgress(percentDone);
// }
// }
// } else {
// setProgressState(SWT.DEFAULT);
// }
// }
// } else {
// setProgressState(SWT.DEFAULT);
// }
//
// if (isAnimated && taskItem != null && !taskItem.isDisposed()) {
// schedule(400);
// }
// return Status.OK_STATUS;
// }
//
// private void setProgressState(int state) {
// if (!taskItem.isDisposed() && taskItem.getProgressState() != state) {
// taskItem.setProgressState(SWT.DEFAULT);
// taskItem.setProgressState(state);
// }
// }
//
// private int getPercentDone(JobTreeElement info) {
// if (info.isJobInfo()) {
// return ((JobInfo) info).getPercentDone();
// }
//
// if (info.hasChildren()) {
// Object[] roots = ((GroupInfo) info).getChildren();
// if (roots.length == 1 && roots[0] instanceof JobTreeElement) {
// TaskInfo ti = ((JobInfo) roots[0]).getTaskInfo();
// if (ti != null) {
// return ti.getPercentDone();
// }
// }
// return ((GroupInfo) info).getPercentDone();
// }
// return 0;
// }
// };
// }
//
// private IJobProgressManagerListener getProgressListener() {
// return new IJobProgressManagerListener() {
//
// /*
// * (non-Javadoc)
// *
// * @see
// * org.eclipse.ui.internal.progress.IJobProgressManagerListener#
// * addJob(org.eclipse.ui.internal.progress.JobInfo)
// */
// public void addJob(JobInfo info) {
// // Don't count the animate job itself
// if (isNotTracked(info)) {
// return;
// }
// if (jobs.isEmpty()) {
// setAnimated(true);
// }
// if (!jobs.contains(info.getJob())) {
// jobs.add(info.getJob());
// }
// jobInfoMap.put(info.getJob(), info);
// }
//
// /*
// * (non-Javadoc)
// *
// * @see
// * org.eclipse.ui.internal.progress.IJobProgressManagerListener#
// * refreshJobInfo(org.eclipse.ui.internal.progress.JobInfo)
// */
// public void refreshJobInfo(JobInfo info) {
// int state = info.getJob().getState();
// if (state == Job.RUNNING) {
// addJob(info);
// } else {
// removeJob(info);
// }
// }
//
// /*
// * (non-Javadoc)
// *
// * @see
// * org.eclipse.ui.internal.progress.IJobProgressManagerListener#
// * refreshAll()
// */
// public void refreshAll() {
// ProgressManager manager = ProgressManager.getInstance();
// jobs.clear();
// jobInfoMap.clear();
// setAnimated(false);
// JobInfo[] currentInfos = manager.getJobInfos(showsDebug());
// for (int i = 0; i < currentInfos.length; i++) {
// addJob(currentInfos[i]);
// }
// }
//
// /*
// * (non-Javadoc)
// *
// * @see
// * org.eclipse.ui.internal.progress.IJobProgressManagerListener#
// * remove(org.eclipse.ui.internal.progress.JobInfo)
// */
// public void removeJob(JobInfo info) {
// jobs.remove(info.getJob());
// jobInfoMap.remove(info.getJob());
// if (jobs.isEmpty()) {
// setAnimated(false);
// }
// }
//
// /*
// * (non-Javadoc)
// *
// * @see
// * org.eclipse.ui.internal.progress.IJobProgressManagerListener#
// * showsDebug()
// */
// public boolean showsDebug() {
// return false;
// }
//
// /**
// * If the job isn't running or doesn't specify the
// * IProgressConstants#SHOW_IN_TASKBAR_ICON_PROPERTY property, don't
// * bother tracking it.
// */
// private boolean isNotTracked(JobInfo info) {
// Job job = info.getJob();
// return job.getState() != Job.RUNNING || !shouldShowSystemProgress(info);
// }
//
// private boolean shouldShowSystemProgress(JobInfo info) {
// Boolean showInTaskBarIcon = Boolean.FALSE;
// Object property = info.getJob().getProperty(
// IProgressConstants2.SHOW_IN_TASKBAR_ICON_PROPERTY);
//
// if (property instanceof Boolean) {
// showInTaskBarIcon = (Boolean) property;
// }
// return showInTaskBarIcon.booleanValue();
//
// }
//
// /*
// * (non-Javadoc)
// *
// * @see
// * org.eclipse.ui.internal.progress.IJobProgressManagerListener#
// * addGroup(org.eclipse.ui.internal.progress.GroupInfo)
// */
// public void addGroup(GroupInfo info) {
// // Don't care about groups
// }
//
// /*
// * (non-Javadoc)
// *
// * @see
// * org.eclipse.ui.internal.progress.IJobProgressManagerListener#
// * removeGroup(org.eclipse.ui.internal.progress.GroupInfo)
// */
// public void removeGroup(GroupInfo group) {
// // Don't care about groups
// }
//
// /*
// * (non-Javadoc)
// *
// * @see
// * org.eclipse.ui.internal.progress.IJobProgressManagerListener#
// * refreshGroup(org.eclipse.ui.internal.progress.GroupInfo)
// */
// public void refreshGroup(GroupInfo info) {
// // Don't care about groups
// }
// };
// }
//
// private synchronized void setAnimated(boolean animated) {
// isAnimated = animated;
// animationUpdateJob.schedule();
// }
//}